测试应用无障碍功能,助力构建适合更多人的精彩应用
为了获得最佳效果,请使用本文档中介绍的所有方法:
手动测试: 使用 Android 无障碍服务与您的应用互动。 使用分析工具进行测试: 使用各种工具发现改进应用无障碍功能的机会。 自动化测试: 在 Espresso 和 Robolectric 中开启无障碍功能测试。 用户测试: 从与您的应用互动的真实用户那里获得反馈。
手动测试
AccessibilityService
https://developer.android.google.cn/reference/android/accessibilityservice/AccessibilityService
TalkBack
开启 TalkBack
打开设备的 "设置" 应用。 转到无障碍,然后选择 TalkBack。 在 TalkBack 屏幕的顶部,按开启/关闭即可开启 TalkBack。 在确认对话框中,选择确定以确认权限。
使用 TalkBack 浏览应用
开启 TalkBack 后,您可以通过以下两种常见方式导航:
线性导航: 快速向左或向右滑动即可按顺序浏览屏幕元素。点按任意位置两次即可选择。 触摸浏览: 在屏幕上拖动手指即可让系统读出手指轻触的内容。点按任意位置两次即可选择。
打开您的应用。 按顺序滑动浏览各个元素。 在浏览过程中,注意下面几个问题: 每个元素的语音反馈是否恰当地传达了其内容或用途?(了解如何编写有意义的标签。) 朗读内容是简洁明了,还是过于冗长? 您能否轻松完成主要工作流程? 您能否通过滑动浏览每个元素? 如果出现提醒或其他临时消息,TalkBack 能否朗读出来?
编写有意义的标签
https://material.io/guidelines/usability/accessibility.html#accessibility-writingTalkBack 用户文档
https://support.google.com/accessibility/android/answer/6006589
TalkBack 开发者设置可让您轻松使用 TalkBack 测试应用。
打开设备的 "设置" 应用。
转到无障碍,然后选择 TalkBack。
依次选择设置 > 高级设置 > 开发者设置: 日志输出级别: 选择详细。
显示语音输出: 开启此设置即可在屏幕上查看 TalkBack 语音输出。
开关控制
"开关控制" 可让用户使用开关 (而不是触摸屏) 与 Android 设备互动。开关分为以下几种: AbleNet、Enabling Devices、RJ Cooper 或 Tecla* 等出售的辅助技术设备;外部键盘按键;或者按钮。对于有运动障碍的用户,此服务非常有用。
配置 "开关控制" 的一种简单方式是使用两个开关。一个开关被指定为 "下一项" 开关,用于在屏幕上移动焦点;第二个是 "选择" 开关,用于选择焦点所在的元素。如需使用这种双开关方法,您可以使用任意一对硬件按键。
如果您使用外部开关 (如键盘),还需要执行其他设置步骤。例如,您需要重新启用软键盘。如需了解详情,请参阅开关控制用户文档:
https://support.google.com/accessibility/android/answer/6301497 如果您使用的是 TalkBack 5.1 或更高版本,则可以使用设置向导配置 "开关控制"。如需使用此向导 (而不是执行以下步骤),请依次转到设置 > 无障碍 > 开关控制 > 设置 > 打开 "开关控制" 设置。
确保 TalkBack 已关闭。
打开设备的 "设置" 应用。 转到无障碍并选择开关控制,然后选择设置。 在 "开关控制偏好设置" 屏幕中,确保自动扫描功能已关闭。 将音量调低键用作 "下一项" 开关:
依次轻触指定扫描按键 > 下一项。 对话框打开后,按音量调低键。此时,对话框会显示 KEYCODE_VOLUME_DOWN。 轻触确定,确认并退出该对话框。 将音量调高键用作 "选择" 开关:
轻触 "选择"。 对话框打开后,按音量调高键。此时,对话框会显示 KEYCODE_VOLUME_UP。 轻触确定,确认并退出该对话框。 如需返回 "开关控制偏好设置",请按返回按钮。 可选: 如果您使用的是 TalkBack 5.1 或更高版本,则可以选择语音反馈来开启语音反馈。 如需返回 "开关控制" 主屏幕,请按返回按钮。 在 "开关控制" 屏幕的顶部,按开启/关闭即可开启 "开关控制"。 在确认对话框中,选择确定以确认权限。
通过 "开关控制" 浏览应用
如需通过 "开关控制" 浏览您的应用,请完成以下步骤:
打开您的应用。 如需开始扫描,请按 "下一项" 开关 (音量调低按钮)。 继续按 "下一项" 开关,直到找到您想要选择的项。 如需选择突出显示的项,请按 "选择" 开关 (音量调高按钮)。 在浏览过程中,注意下面几个问题:
您能否轻松完成主要工作流程? 如果存在文本或其他输入内容,您能否轻松添加和修改内容? 这些项只有在您可以对它们执行操作时才会突出显示吗? 每项是否只能突出显示一次? 可通过触摸屏手势使用的所有功能是否也可作为 "开关控制" 中的可选控件或自定义操作使用? 如果您使用的是 TalkBack 5.1 或更高版本,并且已开启语音反馈,那么每个元素的语音反馈是否恰当地传达了其内容或用途?了解如何编写有意义的标签: https://material.io/guidelines/usability/accessibility.html#accessibility-writing
可选: 通过组选择来查看所有可扫描项
如需开启组选择,请完成以下步骤:
打开设备的 "设置" 应用。 转到无障碍并选择开关控制,然后选择设置。 在 "开关控制偏好设置" 屏幕中,确保自动扫描功能已关闭。 依次选择扫描方法 > 组选择。 轻触指定用来控制扫描的开关。 确保组选择开关 1 和组选择开关 2 下的文本表明已经为这两者各指定了一个开关。如果您已经按照相应的步骤开启 "开关控制",则应该已指定音量按钮。 https://developer.android.google.cn/guide/topics/ui/accessibility/testing#turn-on-switch-access
如需通过组选择使用 "开关控制" 来浏览您的应用,请完成以下步骤:
按 "选择" 键 (音量调高按钮) 以突出显示当前屏幕上的所有可操作项。注意下面几个问题: 是否仅突出显示了可操作项?
是否突出显示所有可操作项? 突出显示的项的密度是否合理? 转到其他屏幕以清除突出显示效果。
其他服务
盲文提示
Google 盲文提示
https://play.google.com/store/apps/details?id=com.googlecode.eyesfree.brailleback
https://support.google.com/accessibility/android/answer/3535226
打开设备的 "设置" 应用。
转到无障碍,然后选择盲文提示。 依次选择设置 > 开发者选项 > 在屏幕上显示盲文输出。
Voice Access
Voice Access
https://play.google.com/store/apps/details?id=com.google.android.apps.accessibility.voiceaccess开始使用 Voice Access
https://support.google.com/accessibility/android/answer/6151848
分析工具
使用分析工具进行测试可以发现手动测试可能会错失的无障碍功能改进机会。
无障碍功能扫描仪
无障碍功能扫描仪
https://play.google.com/store/apps/details?id=com.google.android.apps.accessibility.auditor无障碍功能测试框架
https://github.com/google/Accessibility-Test-Framework-for-Android
了解详情:
开始使用无障碍功能扫描仪 https://support.google.com/accessibility/android/answer/6376570 如何解读无障碍功能扫描仪的扫描结果 https://support.google.com/accessibility/android/answer/6376559
Google Play 上的发布前测试报告
发布前测试报告
https://support.google.com/googleplay/android-developer/answer/7002270将应用上传
https://support.google.com/googleplay/android-developer/answer/113469
无障碍功能测试框架
https://github.com/google/Accessibility-Test-Framework-for-Android
触摸目标大小
https://developer.android.google.cn/guide/topics/ui/accessibility/apps#touch-targets
低对比度
内容标签
实现
可修改的 View 标签
https://support.google.com/accessibility/android/answer/6378120遍历顺序
https://support.google.com/accessibility/android/answer/7664232
UI Automator 查看器
uiautomatorviewer 工具提供了一个方便的 GUI,可扫描和分析 Android 设备上当前显示的界面组件。您可以使用 UI Automator 检查布局层次结构,并查看在设备前台显示的界面组件的属性。利用此信息,您可以创建更精细的测试。例如,通过创建与特定可见属性匹配的界面选择器来做到这一点。该工具位于 Android SDK 的 tools 目录中。
在无障碍功能测试中,此工具对于调试使用其他测试方法发现的问题很有用。例如,如果手动测试发现某个视图应包含却未包含可朗读的文本,或者某个视图不应获得却获得了焦点,您可以使用该工具帮助找出错误的来源。
如需详细了解 UI Automator 查看器,请参阅测试多个应用的界面:
Lint
Android Studio 会显示有关各种无障碍功能问题的 lint 警告,并提供指向源代码中包含这些问题的位置的链接。在以下示例中,一张图片缺少 contentDescription 属性。缺少内容说明会导致生成以下消息:
[Accessibility] Missing 'contentDescription' attribute on image
下图举例说明了此消息在 Android Studio 中是什么样子的:
△ Android Studio 中显示缺少 contentDescription 属性的消息
如果屏幕阅读器等无障碍服务的用户在应用内遇到这张图片,他们将无法理解该图片的含义。
自动测试
Espresso
https://developer.android.google.cn/guide/topics/ui/accessibility/testing#espressoRobolectric
https://developer.android.google.cn/guide/topics/ui/accessibility/testing#robolectric
Espresso
https://developer.android.google.cn/training/testing/espresso
启用检查
import androidx.test.espresso.accessibility.AccessibilityChecks
@RunWith(AndroidJUnit4::class)
@LargeTest
class MyWelcomeWorkflowIntegrationTest {
init {
AccessibilityChecks.enable()
}
}
AccessibilityChecks.enable().setRunChecksFromRootView(true)
ViewActions
https://developer.android.google.cn/reference/androidx/test/espresso/action/ViewActionssetRunChecksFromRootView()
https://github.com/google/Accessibility-Test-Framework-for-Android/blob/a6117fe0059c82dd764fa628d3817d724570f69e/src/main/java/com/google/android/apps/common/testing/accessibility/framework/integrations/espresso/AccessibilityValidator.java#L82
抑制结果的子集
setSuppressingResultMatcher()
https://github.com/google/Accessibility-Test-Framework-for-Android/blob/a6117fe0059c82dd764fa628d3817d724570f69e/src/main/java/com/google/android/apps/common/testing/accessibility/framework/integrations/espresso/AccessibilityValidator.java#L95
如果您对应用所做的更改可以改进无障碍功能的一个方面,让 Espresso 尽可能多地显示无障碍功能其他方面的结果会有好处。因此,最好仅抑制已知的具体改进机会。
如果您暂时抑制无障碍功能测试的某些结果,打算以后再处理,切勿意外抑制类似的结果。因此,请使用作用域较小的匹配器。为此,选择的匹配器应确保只有在给定的结果满足以下每项无障碍功能检查的条件时,Espresso 才会抑制该结果:
某种类型的无障碍功能检查,如用于检查触摸目标大小的无障碍功能检查。 用于评估特定界面元素 (如按钮) 的无障碍功能检查。
匹配器
http://hamcrest.org/JavaHamcrest/tutorial#a-tour-of-common-matchers
AccessibilityChecks.enable().apply {
setSuppressingResultMatcher(
allOf(
matchesCheckNames(`is`("TextContrastViewCheck")),
matchesViews(withId(R.id.countTV))
)
)
}
ATF 定义了多个匹配器
https://github.com/google/Accessibility-Test-Framework-for-Android/blob/a6117fe0059c82dd764fa628d3817d724570f69e/src/main/java/com/google/android/apps/common/testing/accessibility/framework/AccessibilityCheckResultUtils.java
Robolectric
⚠️ 警告: Robolectric 4.5 中已移除此功能,请改用 Espresso 或无障碍功能扫描仪应用:
抑制已知问题
AccessibilityUtil
http://robolectric.org/javadoc/3.1/org/robolectric/util/AccessibilityUtil.htmlsetSuppressingResultMatcher()
http://robolectric.org/javadoc/3.1/org/robolectric/util/AccessibilityUtil.html#setSuppressingResultMatcher(org.hamcrest.Matcher)
用户测试
为了找到可以测试您的应用的用户,请使用如下方法:
与为残障人士提供培训的当地组织、学院或大学联系。 在您的社交圈中询问。可能会有残障人士愿意提供帮助。 询问用户测试服务机构 (如 usertesting.com),看看他们能否邀请残障用户测试您的应用。 加入无障碍功能论坛 (如 Accessibility 或 Eyes-free),邀请志愿者试用您的应用。
usertesting.com
https://www.usertesting.com/Accessibility
https://groups.google.com/forum/#!forum/accessibleEyes-free
https://groups.google.com/forum/#!forum/eyes-free
如需更多提示,请观看以下视频的用户测试部分 (从 31 分 10 秒到 44 分 51 秒):
△ 幕后花絮: Android 无障碍功能的新变化 | 2016 年 Google I/O 大会
推荐阅读